<template>
    <fieldset>
        <legend>按钮权限</legend>
        <fieldset>
            <legend>{{isLogin?"内容页面":"登录页面"}}</legend>
             <!-- 内容页面 -->
             <div class="content" v-if="isLogin">
                <h1>列表展示</h1>
                <button @click="isLogin=false">退出登录</button>
                <button @click="getList">点击获取列表数据</button>
                <h3>
                    昵称：
                    <a href="">{{userInfo.nickname}}</a>
                    <br>
                    头像：
                    <img :src="userInfo.headimgurl" alt="" width="50">
                    <br>
                    城市：
                    <span>{{userInfo.city}}</span>
                </h3>
                <ul>
                    <li v-for="item in lists" :key="item._id">
                        <b>{{item.name}}</b>
                        <button v-has:read="permissionBtns">查看</button>
                        <button v-has:edit="permissionBtns">修改</button>
                        <button v-has:delete="permissionBtns">删除</button>
                        <button v-has:add="permissionBtns">增加</button>
                    </li>
                </ul>
            </div>
            <!-- 登录页面 -->
            <div class="login" v-else>
                <h1>请登录</h1>
                <label for="username">用户名:</label>
                <input type="text" id="username" v-model="username">
                <br>
                <label for="password">密码:</label>
                <input type="password" id="password" v-model="password" @keydown.enter="login">
                <br>
                <button @click="login">登录</button>
            </div>
        </fieldset>
    </fieldset>
</template>
<script>
// import { directive } from 'vue/types/umd'
import Vue from "vue"
// 自定义一个指令
Vue.directive('has',{
    inserted(el,binding){
        console.log(el);
        console.log(binding);   
        //从指令参数值中，也就是binding.arg中，获取按钮所需的权限
        let role = binding.arg
        console.log(role,"role");  
        // 从表达式中，也就是binding.value中，获取用户的权限        
        let userRole = binding.value
        console.log(userRole,"userRole");   
        // 通过数组的方法includes,判断用户有没有这个按钮权限       
        let hasRole = userRole.includes(role)
        if(!hasRole){
            // 没有权限，就禁用
            // el.disabled = true;
            //2，直接不显示，移除
            el.parentNode.removeChild(el)
        }
    }
})
// 封装一个登录的方法
const loginApi =(params={})=>{
    return fetch("http://chst.vip/users/login",{
        //请求方式
        method:'post',
        // 请求头
        headers:{
            "content-type":"application/json"
        },
        // 携带参数
        // 将用户名，密码以对象的方式放到params中
        body:JSON.stringify(params)
    })
    .then(body=>body.json())
    .catch(err=>err.toString())
}
// 封装一个获取列表的方法
const getListApi=()=>{
    return fetch('http://chst.vip/students/getstulist?count=1',{
        // 请求头
        headers:{
            'authorization':sessionStorage.getItem('user-token')
        }
    })
    .then(body=>body.json())
    .catch(err=>err.toString())
}

export default{
    data(){
        return{
            username:"",
            password:"",
            isLogin:false,
            userInfo:"",
            lists:[],
            permissionBtns:[],
        }
    },
    methods:{
        async login(){
            let res = await loginApi({username:this.username,password:this.password})
            console.log(res)
            // 判断登录是否成功
            if(res.state){
                //登录成功
                this.isLogin = true;
                //获取用户信息
                this.userInfo = res.userInfo
                //获取令牌信息，将令牌信息存到本地
                sessionStorage.setItem('user-token',res.token)
                // 给permission赋值
                this.permissionBtns = res.permission.buttons
                
            }else{
                //登录失败
                alert(res.msg)
            }
        },
        async getList(){
            let res = await getListApi()
            console.log(res)
            //判断请求是否成功
            if(res.state){
                this.lists = res.data;
            }else{
                // 请求失败
                alert(res.msg)
            }          
        }
    },
    // directives:{
    //     has:{
    //         inserted(el,binding){
    //             console.log(el,"el");
    //             console.log(binding.arg,"uuuuu");     
    //             let role = binding.arg
    //             console.log(role,"role");          
    //             let userRole = binding.value
    //             console.log(userRole,"userRole");           
    //             let hasRole = userRole.includes(role)
    //             if(!hasRole){              
    //                 el.parentNode.removeChild(el)
    //             }
    //     }
    //     }
    // },
}
</script>
<style>
    ul{
        margin: 0;
        padding: 0;
        list-style: none;
    }
    li{
       margin: 10px; 
       max-width: 500px;
    }
</style>